﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Controls;
using System.Windows.Input;
using WpfApplication2.Helpers;
using WpfApplication2.SindicatoWebService;
using WpfApplication2.Views.HistoriaClinica;
using System.Windows;
using WpfApplication2.Views;

namespace WpfApplication2.ViewModels.Afiliado
{
    public class EditarHistoriaViewModel : ViewModel
    {
        #region properties

        public Instancias Instancias
        {
            get;
            set;
        }

        public SindicatoWebService.Service1SoapClient WS;

        /////////////////////////////////////
        //HISTORIA CLINICA PROPERTY ELEMENTS
        /// ////////////////////////////////

        public string NombreyApellido
        {
            get
            {
                return nombreyApellido;
            }
            set
            {
                if (nombreyApellido != value)
                {
                    nombreyApellido = value;
                    RaisePropertyChanged("NombreyApellido");
                }
            }
        }
        private string nombreyApellido;

        public PropertyElement AutovalidoTotal
        {
            get
            {
                return autovalidoTotal;
            }
            set
            {
                if (autovalidoTotal != value)
                {
                    autovalidoTotal = value;
                    RaisePropertyChanged("AutovalidoTotal");
                }
            }
        }
        private PropertyElement autovalidoTotal;

        public PropertyElement AutovalidoParcial
        {
            get
            {
                return autovalidoParcial;
            }
            set
            {
                if (autovalidoParcial != value)
                {
                    autovalidoParcial = value;
                    RaisePropertyChanged("AutovalidoParcial");
                }
            }
        }
        private PropertyElement autovalidoParcial;

        public PropertyElement Dependiente
        {
            get
            {
                return dependiente;
            }
            set
            {
                if (dependiente != value)
                {
                    dependiente = value;
                    RaisePropertyChanged("Dependiente");
                }
            }
        }
        private PropertyElement dependiente;

        public PropertyElement MotivoConsulta
        {
            get
            {
                return motivoConsulta;
            }
            set
            {
                if (motivoConsulta != value)
                {
                    motivoConsulta = value;
                    RaisePropertyChanged("MotivoConsulta");
                }
            }
        }
        private PropertyElement motivoConsulta;

        public PropertyElement AntecedentesEnfermedad
        {
            get
            {
                return antecedentesEnfermedad;
            }
            set
            {
                if (antecedentesEnfermedad != value)
                {
                    antecedentesEnfermedad = value;
                    RaisePropertyChanged("AntecedentesEnfermedad");
                }
            }
        }
        private PropertyElement antecedentesEnfermedad;

        public TipoAntecedenteDTO[] TiposAntecedentes { get; set; }

        public List<AntecedenteDTO> AntecedentesCollection1
        {
            get
            {
                return antecedentesCollection1;
            }
            set
            {
                if (antecedentesCollection1 != value)
                {
                    antecedentesCollection1 = value;
                    RaisePropertyChanged("AntecedentesCollection1");
                }
            }
        }
        private List<AntecedenteDTO> antecedentesCollection1;

        public List<AntecedenteDTO> AntecedentesCollection2
        {
            get
            {
                return antecedentesCollection2;
            }
            set
            {
                if (antecedentesCollection2 != value)
                {
                    antecedentesCollection2 = value;
                    RaisePropertyChanged("AntecedentesCollection2");
                }
            }
        }
        private List<AntecedenteDTO> antecedentesCollection2;

        public TipoHabitoToxicoDTO[] TiposHabitosToxicos { get; set; }

        public List<HabitoToxicoDTO> HabitosToxicosCollection
        {
            get
            {
                return habitosToxicosCollection;
            }
            set
            {
                if (habitosToxicosCollection != value)
                {
                    habitosToxicosCollection = value;
                    RaisePropertyChanged("HabitosToxicosCollection");
                }
            }
        }
        private List<HabitoToxicoDTO> habitosToxicosCollection;

        public PropertyElement FrecuenciasCardiacas
        {
            get
            {
                return frecuenciasCardiacas;
            }
            set
            {
                if (frecuenciasCardiacas != value)
                {
                    frecuenciasCardiacas = value;
                    RaisePropertyChanged("FrecuenciasCardiacas");
                }
            }
        }
        private PropertyElement frecuenciasCardiacas;

        public PropertyElement VitalPulsoRadial
        {
            get
            {
                return vitalPulsoRadial;
            }
            set
            {
                if (vitalPulsoRadial != value)
                {
                    vitalPulsoRadial = value;
                    RaisePropertyChanged("VitalPulsoRadial");
                }
            }
        }
        private PropertyElement vitalPulsoRadial;

        public PropertyElement Ritmo
        {
            get
            {
                return ritmo;
            }
            set
            {
                if (ritmo != value)
                {
                    ritmo = value;
                    RaisePropertyChanged("Ritmo");
                }
            }
        }
        private PropertyElement ritmo;

        public PropertyElement PresionArterial
        {
            get
            {
                return presionArterial;
            }
            set
            {
                if (presionArterial != value)
                {
                    presionArterial = value;
                    RaisePropertyChanged("PresionArterial");
                }
            }
        }
        private PropertyElement presionArterial;

        public PropertyElement FrecuenciaRespiratoria
        {
            get
            {
                return frecuenciaRespiratoria;
            }
            set
            {
                if (frecuenciaRespiratoria != value)
                {
                    frecuenciaRespiratoria = value;
                    RaisePropertyChanged("FrecuenciaRespiratoria");
                }
            }
        }
        private PropertyElement frecuenciaRespiratoria;

        public PropertyElement PesoActual
        {
            get
            {
                return pesoActual;
            }
            set
            {
                if (pesoActual != value)
                {
                    pesoActual = value;
                    RaisePropertyChanged("PesoActual");
                }
            }
        }
        private PropertyElement pesoActual;

        public PropertyElement PesoHabitual
        {
            get
            {
                return pesoHabitual;
            }
            set
            {
                if (pesoHabitual != value)
                {
                    pesoHabitual = value;
                    RaisePropertyChanged("PesoHabitual");
                }
            }
        }
        private PropertyElement pesoHabitual;

        public PropertyElement Estatura
        {
            get
            {
                return estatura;
            }
            set
            {
                if (estatura != value)
                {
                    estatura = value;
                    RaisePropertyChanged("Estatura");
                }
            }
        }
        private PropertyElement estatura;

        public PropertyElement Temperatura
        {
            get
            {
                return temperatura;
            }
            set
            {
                if (temperatura != value)
                {
                    temperatura = value;
                    RaisePropertyChanged("Temperatura");
                }
            }
        }
        private PropertyElement temperatura;

        public PropertyElement Craneo
        {
            get
            {
                return craneo;
            }
            set
            {
                if (craneo != value)
                {
                    craneo = value;
                    RaisePropertyChanged("Craneo");
                }
            }
        }
        private PropertyElement craneo;

        public PropertyElement Ojo
        {
            get
            {
                return ojo;
            }
            set
            {
                if (ojo != value)
                {
                    ojo = value;
                    RaisePropertyChanged("Ojo");
                }
            }
        }
        private PropertyElement ojo;

        public PropertyElement Oido
        {
            get
            {
                return oido;
            }
            set
            {
                if (oido != value)
                {
                    oido = value;
                    RaisePropertyChanged("Oido");
                }
            }
        }
        private PropertyElement oido;

        public PropertyElement PFCG
        {
            get
            {
                return pfcg;
            }
            set
            {
                if (pfcg != value)
                {
                    pfcg = value;
                    RaisePropertyChanged("PFCG");
                }
            }
        }
        private PropertyElement pfcg;

        public PropertyElement CuelloPalpacion
        {
            get
            {
                return cuelloPalpacion;
            }
            set
            {
                if (cuelloPalpacion != value)
                {
                    cuelloPalpacion = value;
                    RaisePropertyChanged("CuelloPalpacion");
                }
            }
        }
        private PropertyElement cuelloPalpacion;

        public PropertyElement Tamaño
        {
            get
            {
                return tamaño;
            }
            set
            {
                if (tamaño != value)
                {
                    tamaño = value;
                    RaisePropertyChanged("Tamaño");
                }
            }
        }
        private PropertyElement tamaño;

        public PropertyElement CuelloAuscultacion
        {
            get
            {
                return cuelloAuscultacion;
            }
            set
            {
                if (cuelloAuscultacion != value)
                {
                    cuelloAuscultacion = value;
                    RaisePropertyChanged("CuelloAuscultacion");
                }
            }
        }
        private PropertyElement cuelloAuscultacion;

        public PropertyElement Forma
        {
            get
            {
                return forma;
            }
            set
            {
                if (forma != value)
                {
                    forma = value;
                    RaisePropertyChanged("Forma");
                }
            }
        }
        private PropertyElement forma;

        public PropertyElement ToraxMamas
        {
            get
            {
                return toraxMamas;
            }
            set
            {
                if (toraxMamas != value)
                {
                    toraxMamas = value;
                    RaisePropertyChanged("ToraxMamas");
                }
            }
        }
        private PropertyElement toraxMamas;

        public PropertyElement AuscultacionMV
        {
            get
            {
                return auscultacionMV;
            }
            set
            {
                if (auscultacionMV != value)
                {
                    auscultacionMV = value;
                    RaisePropertyChanged("AuscultacionMV");
                }
            }
        }
        private PropertyElement auscultacionMV;

        public PropertyElement AuscultacionVV
        {
            get
            {
                return auscultacionVV;
            }
            set
            {
                if (auscultacionVV != value)
                {
                    auscultacionVV = value;
                    RaisePropertyChanged("AuscultacionVV");
                }
            }
        }
        private PropertyElement auscultacionVV;

        public PropertyElement Rales
        {
            get
            {
                return rales;
            }
            set
            {
                if (rales != value)
                {
                    rales = value;
                    RaisePropertyChanged("Rales");
                }
            }
        }
        private PropertyElement rales;

        public PropertyElement Excursion
        {
            get
            {
                return excursion;
            }
            set
            {
                if (excursion != value)
                {
                    excursion = value;
                    RaisePropertyChanged("Excursion");
                }
            }
        }
        private PropertyElement excursion;

        public PropertyElement R1
        {
            get
            {
                return r1;
            }
            set
            {
                if (r1 != value)
                {
                    r1 = value;
                    RaisePropertyChanged("R1");
                }
            }
        }
        private PropertyElement r1;

        public PropertyElement R2
        {
            get
            {
                return r2;
            }
            set
            {
                if (r2 != value)
                {
                    r2 = value;
                    RaisePropertyChanged("R2");
                }
            }
        }
        private PropertyElement r2;

        public PropertyElement Soplos
        {
            get
            {
                return soplos;
            }
            set
            {
                if (soplos != value)
                {
                    soplos = value;
                    RaisePropertyChanged("Soplos");
                }
            }
        }
        private PropertyElement soplos;

        public PropertyElement PulsoCarotideo
        {
            get
            {
                return pulsoCarotideo;
            }
            set
            {
                if (pulsoCarotideo != value)
                {
                    pulsoCarotideo = value;
                    RaisePropertyChanged("PulsoCarotideo");
                }
            }
        }
        private PropertyElement pulsoCarotideo;

        public PropertyElement PulsoRadial
        {
            get
            {
                return pulsoRadial;
            }
            set
            {
                if (pulsoRadial != value)
                {
                    pulsoRadial = value;
                    RaisePropertyChanged("PulsoRadial");
                }
            }
        }
        private PropertyElement pulsoRadial;

        public PropertyElement PulsoFemoral
        {
            get
            {
                return pulsoFemoral;
            }
            set
            {
                if (pulsoFemoral != value)
                {
                    pulsoFemoral = value;
                    RaisePropertyChanged("PulsoFemoral");
                }
            }
        }
        private PropertyElement pulsoFemoral;

        public PropertyElement Pedio
        {
            get
            {
                return pedio;
            }
            set
            {
                if (pedio != value)
                {
                    pedio = value;
                    RaisePropertyChanged("Pedio");
                }
            }
        }
        private PropertyElement pedio;

        public PropertyElement AbdomenInspeccion
        {
            get
            {
                return abdomenInspeccion;
            }
            set
            {
                if (abdomenInspeccion != value)
                {
                    abdomenInspeccion = value;
                    RaisePropertyChanged("AbdomenInspeccion");
                }
            }
        }
        private PropertyElement abdomenInspeccion;

        public PropertyElement AbdomenPalpacion
        {
            get
            {
                return abdomenPalpacion;
            }
            set
            {
                if (abdomenPalpacion != value)
                {
                    abdomenPalpacion = value;
                    RaisePropertyChanged("AbdomenPalpacion");
                }
            }
        }
        private PropertyElement abdomenPalpacion;

        public PropertyElement AbdomenAuscultacion
        {
            get
            {
                return abdomenAuscultacion;
            }
            set
            {
                if (abdomenAuscultacion != value)
                {
                    abdomenAuscultacion = value;
                    RaisePropertyChanged("AbdomenAuscultacion");
                }
            }
        }
        private PropertyElement abdomenAuscultacion;

        public PropertyElement PPRenalDerecha
        {
            get
            {
                return pPRenalDerecha;
            }
            set
            {
                if (pPRenalDerecha != value)
                {
                    pPRenalDerecha = value;
                    RaisePropertyChanged("PPRenalDerecha");
                }
            }
        }
        private PropertyElement pPRenalDerecha;

        public PropertyElement PPRenalIzquierda
        {
            get
            {
                return pPRenalIzquierda;
            }
            set
            {
                if (pPRenalIzquierda != value)
                {
                    pPRenalIzquierda = value;
                    RaisePropertyChanged("PPRenalIzquierda");
                }
            }
        }
        private PropertyElement pPRenalIzquierda;

        public PropertyElement PPRenalMamas
        {
            get
            {
                return pPRenalMamas;
            }
            set
            {
                if (pPRenalMamas != value)
                {
                    pPRenalMamas = value;
                    RaisePropertyChanged("PPRenalMamas");
                }
            }
        }
        private PropertyElement pPRenalMamas;

        public PropertyElement Sensorio
        {
            get
            {
                return sensorio;
            }
            set
            {
                if (sensorio != value)
                {
                    sensorio = value;
                    RaisePropertyChanged("Sensorio");
                }
            }
        }
        private PropertyElement sensorio;

        public PropertyElement Lenguaje
        {
            get
            {
                return lenguaje;
            }
            set
            {
                if (lenguaje != value)
                {
                    lenguaje = value;
                    RaisePropertyChanged("Lenguaje");
                }
            }
        }
        private PropertyElement lenguaje;

        public PropertyElement Marcha
        {
            get
            {
                return marcha;
            }
            set
            {
                if (marcha != value)
                {
                    marcha = value;
                    RaisePropertyChanged("Marcha");
                }
            }
        }
        private PropertyElement marcha;

        public PropertyElement Temblor
        {
            get
            {
                return temblor;
            }
            set
            {
                if (temblor != value)
                {
                    temblor = value;
                    RaisePropertyChanged("Temblor");
                }
            }
        }
        private PropertyElement temblor;

        public PropertyElement Taxia
        {
            get
            {
                return taxia;
            }
            set
            {
                if (taxia != value)
                {
                    taxia = value;
                    RaisePropertyChanged("Taxia");
                }
            }
        }
        private PropertyElement taxia;

        public PropertyElement ReflejoFotomotor
        {
            get
            {
                return reflejoFotomotor;
            }
            set
            {
                if (reflejoFotomotor != value)
                {
                    reflejoFotomotor = value;
                    RaisePropertyChanged("ReflejoFotomotor");
                }
            }
        }
        private PropertyElement reflejoFotomotor;

        public PropertyElement ReflejosAcomodacion
        {
            get
            {
                return reflejosAcomodacion;
            }
            set
            {
                if (reflejosAcomodacion != value)
                {
                    reflejosAcomodacion = value;
                    RaisePropertyChanged("ReflejosAcomodacion");
                }
            }
        }
        private PropertyElement reflejosAcomodacion;

        public PropertyElement ReflejosOsteotendinosos
        {
            get
            {
                return reflejosOsteotendinosos;
            }
            set
            {
                if (reflejosOsteotendinosos != value)
                {
                    reflejosOsteotendinosos = value;
                    RaisePropertyChanged("ReflejosOsteotendinosos");
                }
            }
        }
        private PropertyElement reflejosOsteotendinosos;

        public PropertyElement Sensibilidad
        {
            get
            {
                return sensibilidad;
            }
            set
            {
                if (sensibilidad != value)
                {
                    sensibilidad = value;
                    RaisePropertyChanged("Sensibilidad");
                }
            }
        }
        private PropertyElement sensibilidad;

        public PropertyElement ColumnaCervical
        {
            get
            {
                return columnaCervical;
            }
            set
            {
                if (columnaCervical != value)
                {
                    columnaCervical = value;
                    RaisePropertyChanged("ColumnaCervical");
                }
            }
        }
        private PropertyElement columnaCervical;

        public PropertyElement Dorsal
        {
            get
            {
                return dorsal;
            }
            set
            {
                if (dorsal != value)
                {
                    dorsal = value;
                    RaisePropertyChanged("Dorsal");
                }
            }
        }
        private PropertyElement dorsal;

        public PropertyElement Lumbar
        {
            get
            {
                return lumbar;
            }
            set
            {
                if (lumbar != value)
                {
                    lumbar = value;
                    RaisePropertyChanged("Lumbar");
                }
            }
        }
        private PropertyElement lumbar;

        public PropertyElement Movilidad
        {
            get
            {
                return movilidad;
            }
            set
            {
                if (movilidad != value)
                {
                    movilidad = value;
                    RaisePropertyChanged("Movilidad");
                }
            }
        }
        private PropertyElement movilidad;

        public PropertyElement Dolor
        {
            get
            {
                return dolor;
            }
            set
            {
                if (dolor != value)
                {
                    dolor = value;
                    RaisePropertyChanged("Dolor");
                }
            }
        }
        private PropertyElement dolor;

        public PropertyElement Tumefaccion
        {
            get
            {
                return tumefaccion;
            }
            set
            {
                if (tumefaccion != value)
                {
                    tumefaccion = value;
                    RaisePropertyChanged("Tumefaccion");
                }
            }
        }
        private PropertyElement tumefaccion;

        public PropertyElement DiagnosticoPresuntivo
        {
            get
            {
                return diagnosticoPresuntivo;
            }
            set
            {
                if (diagnosticoPresuntivo != value)
                {
                    diagnosticoPresuntivo = value;
                    RaisePropertyChanged("DiagnosticoPresuntivo");
                }
            }
        }
        private PropertyElement diagnosticoPresuntivo;

        public PropertyElement MetodosComplementarios
        {
            get
            {
                return metodosComplementarios;
            }
            set
            {
                if (metodosComplementarios != value)
                {
                    metodosComplementarios = value;
                    RaisePropertyChanged("MetodosComplementarios");
                }
            }
        }
        private PropertyElement metodosComplementarios;

        public PropertyElement Tratamiento
        {
            get
            {
                return tratamiento;
            }
            set
            {
                if (tratamiento != value)
                {
                    tratamiento = value;
                    RaisePropertyChanged("Tratamiento");
                }
            }
        }
        private PropertyElement tratamiento;

        public HistoriaClinicaDTO Historia
        {
            get
            {
                return historia;
            }
            set
            {
                if (historia != value)
                {
                    historia = value;
                    RaisePropertyChanged("Historia");
                }
            }
        }
        private HistoriaClinicaDTO historia;

        public List<EvolucionClinicaDTO> EvolucionesCollection
        {
            get
            {
                return evolucionesCollection;
            }
            set
            {
                if (evolucionesCollection != value)
                {
                    evolucionesCollection = value;
                    RaisePropertyChanged("EvolucionesCollection");
                }
            }
        }
        private List<EvolucionClinicaDTO> evolucionesCollection;

        public AfiliadoDTO Afiliado { get; set; }

        public string OpcionPatologia
        {
            get
            {
                if (opcionPatologia == "NuevaPatologia")
                {
                    OpcionPatologiaNueva = Visibility.Visible;
                    OpcionPatologiaSeleccionar = Visibility.Collapsed;
                }
                else
                {
                    OpcionPatologiaNueva = Visibility.Collapsed;
                    OpcionPatologiaSeleccionar = Visibility.Visible;
                }
                return opcionPatologia;
            }
            set
            {
                if (opcionPatologia != value)
                {
                    opcionPatologia = value;
                    RaisePropertyChanged("OpcionPatologia");
                }
            }
        }
        private string opcionPatologia;

        public Visibility OpcionPatologiaNueva
        {
            get
            {
                return opcionPatologiaNueva;
            }
            set
            {
                if (opcionPatologiaNueva != value)
                {
                    opcionPatologiaNueva = value;
                    RaisePropertyChanged("OpcionPatologiaNueva");
                }
            }
        }
        private Visibility opcionPatologiaNueva;

        public Visibility OpcionPatologiaSeleccionar
        {
            get
            {
                return opcionPatologiaSeleccionar;
            }
            set
            {
                if (opcionPatologiaSeleccionar != value)
                {
                    opcionPatologiaSeleccionar = value;
                    RaisePropertyChanged("OpcionPatologiaSeleccionar");
                }
            }
        }
        private Visibility opcionPatologiaSeleccionar;

        public string PatologiaId
        {
            get
            {
                return patologiaId;
            }
            set
            {
                if (patologiaId != value)
                {
                    patologiaId = value;
                    RaisePropertyChanged("PatologiaId");
                }
            }
        }
        private string patologiaId;


        public PatologiaDTO PatologiaNueva
        {
            get
            {
                return patologiaNueva;
            }
            set
            {
                if (patologiaNueva != value)
                {
                    patologiaNueva = value;
                    RaisePropertyChanged("PatologiaNueva");
                }
            }
        }
        private PatologiaDTO patologiaNueva;

        public PatologiaDTO[] PatologiasCollection
        {
            get
            {
                return patologiasCollection;
            }
            set
            {
                if (patologiasCollection != value)
                {
                    patologiasCollection = value;
                    RaisePropertyChanged("PatologiasCollection");
                }
            }
        }
        private PatologiaDTO[] patologiasCollection;

        public PropertyElement PatologiaNombre
        {
            get
            {
                return patologiaNombre;
            }
            set
            {
                if (patologiaNombre != value)
                {
                    patologiaNombre = value;
                    RaisePropertyChanged("PatologiaNombre");
                }
            }
        }
        private PropertyElement patologiaNombre;

        public PropertyElement PatologiaDescripcion
        {
            get
            {
                return patologiaDescripcion;
            }
            set
            {
                if (patologiaDescripcion != value)
                {
                    patologiaDescripcion = value;
                    RaisePropertyChanged("PatologiaDescripcion");
                }
            }
        }
        private PropertyElement patologiaDescripcion;

        public string SeleccionarPatologiaForeground
        {
            get
            {
                return seleccionarPatologiaForeground;
            }
            set
            {
                if (seleccionarPatologiaForeground != value)
                {
                    seleccionarPatologiaForeground = value;
                    RaisePropertyChanged("SeleccionarPatologiaForeground");
                }
            }
        }
        private string seleccionarPatologiaForeground;

        #endregion

        public EditarHistoriaViewModel(Instancias instancias, AfiliadoDTO afiliado, HistoriaClinicaDTO historia)
        {
            WS = new Service1SoapClient();
            Instancias = instancias;
            Afiliado = afiliado;
            Historia = historia;
            CompletarDatosHistoria();
            InicializarPropiedades();
            CargarColecciones();
        }

        private void CompletarDatosHistoria()
        {
            Historia.Antecedentes = WS.ObtenerAntecedentesPorHistoriaId(Historia.Id);
            Historia.HabitosToxicos = WS.ObtenerHabitosPorHistoriaId(Historia.Id);
            Historia.EvolucionesClinicas = WS.ObtenerEvolucionesPorHistoriaId(Historia.Id);
        }

        private void CargarColecciones()
        {
            PatologiasCollection = WS.GetPatologias();
            TiposAntecedentes = WS.GetTiposAntecedentes();

            AntecedentesCollection1 = new List<AntecedenteDTO>();
            AntecedentesCollection2 = new List<AntecedenteDTO>();
            for (var i = 0; i < 20; i++)
            {
                var tipo = TiposAntecedentes.ElementAt(i);
                var ant = new AntecedenteDTO() { Tiene = "NO", TipoAntecedenteId = tipo.Id, Descripcion = tipo.Nombre };
                var antAux = Historia.Antecedentes.Where(x => x.TipoAntecedenteId == ant.TipoAntecedenteId).FirstOrDefault();
                if (antAux == null)
                {
                    if (i < 10)
                        AntecedentesCollection1.Add(ant);
                    else
                        AntecedentesCollection2.Add(ant);
                }
                else
                {
                    if (i < 10)
                        AntecedentesCollection1.Add(antAux);
                    else
                        AntecedentesCollection2.Add(antAux);
                }

            }

            TiposHabitosToxicos = WS.GetTiposHabitosToxicos();
            HabitosToxicosCollection = new List<HabitoToxicoDTO>();
            foreach (var tipo in TiposHabitosToxicos)
            {
                var habitoAux = Historia.HabitosToxicos.Where(x => x.TipoHabitoId == tipo.Id).FirstOrDefault();
                if (habitoAux == null)
                    HabitosToxicosCollection.Add(new HabitoToxicoDTO { NombreHabito = tipo.Nombre, Tiene = false, TipoHabitoId = tipo.Id });
                else
                    HabitosToxicosCollection.Add(habitoAux);

            }

            EvolucionesCollection = new List<EvolucionClinicaDTO>();
            foreach (var evolucion in Historia.EvolucionesClinicas)
            {
                EvolucionesCollection.Add(new EvolucionClinicaDTO
                    {
                        Fecha = evolucion.Fecha,
                        Contenido = evolucion.Contenido,
                        Guardada = evolucion.Guardada,
                        HistoriaId = evolucion.HistoriaId,
                        Id = evolucion.Id
                    });
            }
        }

        private void InicializarPropiedades()
        {
            #region Inicializacion de propiedades
            
            OpcionPatologia = "BuscarPatologia";
            SeleccionarPatologiaForeground = "White";
            PatologiaId = Historia.Patologia.Id.ToString();
            NombreyApellido = String.Format("({0} {1})", Afiliado.Nombre.Trim(), Afiliado.Apellido.Trim());

            AutovalidoTotal = new PropertyElement() { Foreground = "White", Name = "AutovalidoTotal", Value = Historia.ConsultaInicial.AutoValidoTotal };
            AutovalidoParcial = new PropertyElement() { Foreground = "White", Name = "AutovalidoParcial", Value = Historia.ConsultaInicial.AutoValidoParcial };
            Dependiente = new PropertyElement() { Foreground = "White", Name = "Dependiente", Value = Historia.ConsultaInicial.Dependiente };
            MotivoConsulta = new PropertyElement() { Foreground = "White", Name = "MotivoConsulta", Validations = { ValidationType.Requerido }, Value = Historia.ConsultaInicial.MotivoConsulta };
            AntecedentesEnfermedad = new PropertyElement() { Foreground = "White", Name = "AntecedentesEnfermedad", Value = Historia.ConsultaInicial.AntecedentesEnfermedad };

            FrecuenciasCardiacas = new PropertyElement() { Foreground = "White", Name = "FrecuenciasCardiacas", Value = Historia.SignosVitales.FrecuenciaCardiaca };
            VitalPulsoRadial = new PropertyElement() { Foreground = "White", Name = "VitalPulsoRadial", Value = Historia.SignosVitales.PulsoRadial };
            Ritmo = new PropertyElement() { Foreground = "White", Name = "Ritmo", Value = Historia.SignosVitales.Ritmo };
            PresionArterial = new PropertyElement() { Foreground = "White", Name = "PresionArterial", Value = Historia.SignosVitales.PresionArterial };
            FrecuenciaRespiratoria = new PropertyElement() { Foreground = "White", Name = "FrecuenciaRespiratoria", Value = Historia.SignosVitales.FrecuenciaRespiratoria };
            PesoActual = new PropertyElement() { Foreground = "White", Name = "PesoActual", Value = Historia.SignosVitales.PesoActual };
            PesoHabitual = new PropertyElement() { Foreground = "White", Name = "PesoHabitual", Value = Historia.SignosVitales.PesoHabitual };
            Estatura = new PropertyElement() { Foreground = "White", Name = "Estatura", Value = Historia.SignosVitales.Estatura };
            Temperatura = new PropertyElement() { Foreground = "White", Name = "Temperatura", Value = Historia.SignosVitales.Temperatura };

            CuelloPalpacion = new PropertyElement() { Foreground = "White", Name = "CuelloPalpacion", Value = Historia.Cuello.Palpacion };
            CuelloAuscultacion = new PropertyElement() { Foreground = "White", Name = "CuelloAuscultacion", Value = Historia.Cuello.Auscultacion };
            Tamaño = new PropertyElement() { Foreground = "White", Name = "Tamaño", Value = Historia.Cuello.Tamaño };

            AbdomenInspeccion = new PropertyElement() { Foreground = "White", Name = "AbdomenInspeccion", Value = Historia.Abdomen.Inspeccion };
            AbdomenPalpacion = new PropertyElement() { Foreground = "White", Name = "AbdomenPalpacion", Value = Historia.Abdomen.Palpacion };
            AbdomenAuscultacion = new PropertyElement() { Foreground = "White", Name = "AbdomenAuscultacion", Value = Historia.Abdomen.Auscultacion };

            Craneo = new PropertyElement() { Foreground = "White", Name = "Craneo", Value = Historia.ExamenVarios.Craneo };
            Ojo = new PropertyElement() { Foreground = "White", Name = "Ojo", Value = Historia.ExamenVarios.Ojo };
            Oido = new PropertyElement() { Foreground = "White", Name = "Oido", Value = Historia.ExamenVarios.Oido };
            Forma = new PropertyElement() { Foreground = "White", Name = "Forma", Value = Historia.ExamenVarios.ToraxForma };
            ToraxMamas = new PropertyElement() { Foreground = "White", Name = "ToraxMamas", Value = Historia.ExamenVarios.ToraxMamas };
            AuscultacionMV = new PropertyElement() { Foreground = "White", Name = "AuscultacionMV", Value = Historia.ExamenVarios.AuscultacionMV };
            AuscultacionVV = new PropertyElement() { Foreground = "White", Name = "AuscultacionVV", Value = Historia.ExamenVarios.AuscultacionVV };
            Rales = new PropertyElement() { Foreground = "White", Name = "Rales", Value = Historia.ExamenVarios.Rales };
            Excursion = new PropertyElement() { Foreground = "White", Name = "Excursion", Value = Historia.ExamenVarios.Excursion };
            R1 = new PropertyElement() { Foreground = "White", Name = "R1", Value = Historia.ExamenVarios.R1 };
            R2 = new PropertyElement() { Foreground = "White", Name = "R2", Value = Historia.ExamenVarios.R2 };
            Soplos = new PropertyElement() { Foreground = "White", Name = "Soplos", Value = Historia.ExamenVarios.Soplos };
            PulsoCarotideo = new PropertyElement() { Foreground = "White", Name = "PulsoCarotideo", Value = Historia.ExamenVarios.Carotideo };
            PulsoRadial = new PropertyElement() { Foreground = "White", Name = "PulsoRadial", Value = Historia.ExamenVarios.Radial };
            PulsoFemoral = new PropertyElement() { Foreground = "White", Name = "PulsoFemoral", Value = Historia.ExamenVarios.Femoral };
            Pedio = new PropertyElement() { Foreground = "White", Name = "Pedio", Value = Historia.ExamenVarios.Pedio };
            PPRenalDerecha = new PropertyElement() { Foreground = "White", Name = "PPRenalDerecha", Value = Historia.ExamenVarios.PPRenalDerecha };
            PPRenalIzquierda = new PropertyElement() { Foreground = "White", Name = "PPRenalIzquierda", Value = Historia.ExamenVarios.PPRenalIzquierda };
            PPRenalMamas = new PropertyElement() { Foreground = "White", Name = "PPRenalMamas", Value = Historia.ExamenVarios.PPRenalMamas };
            PFCG = new PropertyElement() { Foreground = "White", Name = "PFCG", Value = Historia.ExamenVarios.PCFG };

            Sensorio = new PropertyElement() { Foreground = "White", Name = "Sensorio", Value = Historia.SistemaNervioso.Sensorio };
            Lenguaje = new PropertyElement() { Foreground = "White", Name = "Lenguaje", Value = Historia.SistemaNervioso.Lenguaje };
            Marcha = new PropertyElement() { Foreground = "White", Name = "Lenguaje", Value = Historia.SistemaNervioso.Marcha };
            Temblor = new PropertyElement() { Foreground = "White", Name = "Temblor", Value = Historia.SistemaNervioso.Temblor };
            Taxia = new PropertyElement() { Foreground = "White", Name = "Taxia", Value = Historia.SistemaNervioso.Taxia };
            ReflejoFotomotor = new PropertyElement() { Foreground = "White", Name = "ReflejoFotomotor", Value = Historia.SistemaNervioso.ReflejosFotomotor };
            ReflejosAcomodacion = new PropertyElement() { Foreground = "White", Name = "ReflejosAcomodacion", Value = Historia.SistemaNervioso.ReflejosAcomodacion };
            ReflejosOsteotendinosos = new PropertyElement() { Foreground = "White", Name = "ReflejosOsteotendinosos", Value = Historia.SistemaNervioso.OsteoTendinosos };
            Sensibilidad = new PropertyElement() { Foreground = "White", Name = "Sensibilidad", Value = Historia.SistemaNervioso.Sensibilidad };

            ColumnaCervical = new PropertyElement() { Foreground = "White", Name = "ColumnaCervical", Value = Historia.OsteoMuscular.Cervical };
            Dorsal = new PropertyElement() { Foreground = "White", Name = "Dorsal", Value = Historia.OsteoMuscular.Dorsal };
            Lumbar = new PropertyElement() { Foreground = "White", Name = "Lumbar", Value = Historia.OsteoMuscular.Lumbar };
            Movilidad = new PropertyElement() { Foreground = "White", Name = "Movilidad", Value = Historia.OsteoMuscular.Movilidad };
            Dolor = new PropertyElement() { Foreground = "White", Name = "Dolor", Value = Historia.OsteoMuscular.Dolor };
            Tumefaccion = new PropertyElement() { Foreground = "White", Name = "Tumefaccion", Value = Historia.OsteoMuscular.Tumefaccion };

            DiagnosticoPresuntivo = new PropertyElement() { Foreground = "White", Name = "DiagnosticoPresuntivo", Value = Historia.DiagnosticoPresuntivo };
            MetodosComplementarios = new PropertyElement() { Foreground = "White", Name = "MetodosComplementarios", Value = Historia.MetodosComplementarios };
            Tratamiento = new PropertyElement() { Foreground = "White", Name = "Tratamiento", Value = Historia.Tratamiento };
            PatologiaNombre = new PropertyElement() { Foreground = "White", Name = "PatologiaNombre" };
            PatologiaDescripcion = new PropertyElement() { Foreground = "White", Name = "PatologiaDescripcion" };

            #endregion

            #region Agregar para validacion
            
            //ValidationList.Add(MotivoConsulta);
            #endregion
        }

        #region Update Historia

        private DelegateCommand guardarCambiosCommand;

        public ICommand GuardarCambiosCommand
        {
            get
            {
                if (guardarCambiosCommand == null)
                {
                    guardarCambiosCommand = new DelegateCommand(GuardarCambios, CanExecute);
                }
                return guardarCambiosCommand;
            }
        }

        private bool CanExecute()
        {
            return true;
        }

        private void GuardarCambios()
        {
            var seguro = Instancias.Confirmacion.ShowHandlerDialog("Está seguro que desea guardar los cambios?");
            if (seguro)
            {
                if (DataIsValid)
                {
                    if (OpcionPatologia == "NuevaPatologia")
                    {
                        if (string.IsNullOrEmpty(PatologiaNombre.Value))
                        {
                            PatologiaNombre.Foreground = "#bb0000";
                            RaisePropertyChanged("PatologiaNombre");
                            Instancias.ModalDialog.ShowHandlerDialog("Debe ingresar el nombre de la nueva patología");
                            return;
                        }
                        else
                        {
                            PatologiaNueva = new PatologiaDTO { Nombre = PatologiaNombre.Value, Descripcion = PatologiaDescripcion.Value };
                            PatologiaNueva.Id = WS.GuardarPatologia(PatologiaNueva);
                            HistoriaClinicaDTO HC = ArmarHistoriaClinica();
                            HC.Patologia = PatologiaNueva;
                            WS.ModificarHistoria(HC);
                            Instancias.ModalDialog.ShowHandlerDialog("Los cambios han sido guardados correctamente.");
                            Instancias.FrameContent.Content = new ConsultarHistoria(Instancias, Afiliado, HC);
                        }
                    }
                    else
                    {
                        if (string.IsNullOrEmpty(PatologiaId))
                        {
                            SeleccionarPatologiaForeground = "#bb0000";
                            RaisePropertyChanged("SeleccionarPatologiaForeground");
                            Instancias.ModalDialog.ShowHandlerDialog("Debe seleccionar una patología.");
                            return;
                        }
                        else
                        {
                            HistoriaClinicaDTO HC = ArmarHistoriaClinica();
                            HC.Patologia = new PatologiaDTO { Id = Convert.ToInt32(PatologiaId) };
                            WS.ModificarHistoria(HC);
                            Instancias.ModalDialog.ShowHandlerDialog("Los cambios han sido guardados correctamente.");
                            Instancias.FrameContent.Content = new ConsultarHistoria(Instancias, Afiliado, HC);
                        }
                    }
                }
            }
        }

        #endregion

        #region Armar Historia Clinica

        private HistoriaClinicaDTO ArmarHistoriaClinica()
        {
            var hc = new HistoriaClinicaDTO()
            {
                Id = Historia.Id,
                DiagnosticoPresuntivo = DiagnosticoPresuntivo.Value,
                MetodosComplementarios = MetodosComplementarios.Value,
                Tratamiento = Tratamiento.Value
            };

            hc.ConsultaInicial = ArmarConsultaInicial();
            hc.Antecedentes = ArmarAntecedentes();
            hc.HabitosToxicos = ArmarHabitosToxicos();
            hc.Abdomen = ArmarAbdomen();
            hc.Cuello = ArmarCuello();
            hc.OsteoMuscular = ArmarOsteoMuscular();
            hc.SignosVitales = ArmarSignosVitales();
            hc.SistemaNervioso = ArmarSistemaNervioso();
            hc.ExamenVarios = ArmarExamenVarios();
            hc.EvolucionesClinicas = ArmarEvolucionesClinicas();
            return hc;
        }

        private EvolucionClinicaDTO[] ArmarEvolucionesClinicas()
        {
            var lista = EvolucionesCollection.Where(x => x.Id != 0).ToList();
            var l = new EvolucionClinicaDTO[lista.Count];
            for (int i = 0; i < lista.Count; i++)
            {
                l[i] = lista.ElementAt(i);
            }
            return l;
        }

        private ConsultaInicialDTO ArmarConsultaInicial()
        {
            return new ConsultaInicialDTO
            {
                AutoValidoTotal = AutovalidoTotal.Value,
                AutoValidoParcial = AutovalidoParcial.Value,
                Dependiente = Dependiente.Value,
                MotivoConsulta = MotivoConsulta.Value,
                AntecedentesEnfermedad = AntecedentesEnfermedad.Value
            };
        }

        private AntecedenteDTO[] ArmarAntecedentes()
        {
            var lista = new List<AntecedenteDTO>();
            foreach (var a in AntecedentesCollection1)
            {
                if (a.Tiene == "SI")
                    lista.Add(a);
            }
            foreach (var a in AntecedentesCollection2)
            {
                if (a.Tiene == "SI")
                    lista.Add(a);
            }
            var l = new AntecedenteDTO[lista.Count];
            for (int i = 0; i < lista.Count; i++)
            {
                l[i] = lista.ElementAt(i);
            }

            return l;
        }

        private HabitoToxicoDTO[] ArmarHabitosToxicos()
        {
            var lista = new List<HabitoToxicoDTO>();
            foreach (var ht in HabitosToxicosCollection)
            {
                if (ht.Tiene)
                    lista.Add(ht);
            }
            var l = new HabitoToxicoDTO[lista.Count];
            for (int i = 0; i < lista.Count; i++)
            {
                l[i] = lista.ElementAt(i);
            }
            return l;
        }

        private ExamenVariosDTO ArmarExamenVarios()
        {
            return new ExamenVariosDTO
            {
                Craneo = Craneo.Value,
                Ojo = Ojo.Value,
                Oido = Oido.Value,
                PCFG = PFCG.Value,
                ToraxForma = Forma.Value,
                ToraxMamas = ToraxMamas.Value,
                AuscultacionMV = AuscultacionMV.Value,
                AuscultacionVV = AuscultacionVV.Value,
                Rales = Rales.Value,
                Excursion = Excursion.Value,
                R1 = R1.Value,
                R2 = R2.Value,
                Soplos = Soplos.Value,
                Carotideo = PulsoCarotideo.Value,
                Radial = PulsoRadial.Value,
                Femoral = PulsoFemoral.Value,
                Pedio = Pedio.Value,
                PPRenalDerecha = PPRenalDerecha.Value,
                PPRenalIzquierda = PPRenalIzquierda.Value,
                PPRenalMamas = PPRenalMamas.Value
            };
        }

        private SistemaNerviosoDTO ArmarSistemaNervioso()
        {
            return new SistemaNerviosoDTO
            {
                Sensorio = Sensorio.Value,
                Lenguaje = Lenguaje.Value,
                Marcha = Marcha.Value,
                Temblor = Temblor.Value,
                Taxia = Taxia.Value,
                ReflejosFotomotor = ReflejoFotomotor.Value,
                ReflejosAcomodacion = ReflejosAcomodacion.Value,
                OsteoTendinosos = ReflejosOsteotendinosos.Value,
                Sensibilidad = Sensibilidad.Value
            };
        }

        private SignosVitalesDTO ArmarSignosVitales()
        {
            return new SignosVitalesDTO
            {
                FrecuenciaCardiaca = FrecuenciasCardiacas.Value,
                Estatura = Estatura.Value,
                FrecuenciaRespiratoria = FrecuenciaRespiratoria.Value,
                PesoActual = PesoActual.Value,
                PesoHabitual = PesoHabitual.Value,
                PresionArterial = PresionArterial.Value,
                PulsoRadial = VitalPulsoRadial.Value,
                Ritmo = Ritmo.Value,
                Temperatura = Temperatura.Value
            };
        }

        private OsteoMuscularDTO ArmarOsteoMuscular()
        {
            return new OsteoMuscularDTO
            {
                Cervical = ColumnaCervical.Value,
                Dorsal = Dorsal.Value,
                Lumbar = Lumbar.Value,
                Movilidad = Movilidad.Value,
                Dolor = Dolor.Value,
                Tumefaccion = Tumefaccion.Value
            };
        }

        private CuelloDTO ArmarCuello()
        {
            return new CuelloDTO
            {
                Auscultacion = CuelloAuscultacion.Value,
                Palpacion = CuelloPalpacion.Value,
                Tamaño = Tamaño.Value
            };
        }

        private AbdomenDTO ArmarAbdomen()
        {
            return new AbdomenDTO
            {
                Inspeccion = AbdomenInspeccion.Value,
                Palpacion = AbdomenPalpacion.Value,
                Auscultacion = AbdomenAuscultacion.Value
            };
        }


        #endregion

        #region Nueva Evolucion

        private DelegateCommand nuevaEvolucionCommand;

        public ICommand NuevaEvolucionCommand
        {
            get
            {
                if (nuevaEvolucionCommand == null)
                {
                    nuevaEvolucionCommand = new DelegateCommand(NuevaEvolucion, CanExecute);
                }
                return nuevaEvolucionCommand;
            }
        }

        private void NuevaEvolucion()
        {
            var lista = new List<EvolucionClinicaDTO>();
            var nuevoId = EvolucionesCollection.Count != 0 ? EvolucionesCollection.Max(x => x.Id) + 1 : 1;
            foreach (var ev in EvolucionesCollection.Where(x => x.Id != 0).ToList())
            {
                lista.Add(ev);
            }
            lista.Add(new EvolucionClinicaDTO { Fecha = DateTime.Now, Id = nuevoId });
            EvolucionesCollection = lista;
        }

        #endregion

        #region Eliminar Historia

        private DelegateCommand eliminarHistoriaCommand;

        public ICommand EliminarHistoriaCommand
        {
            get
            {
                if (eliminarHistoriaCommand == null)
                {
                    eliminarHistoriaCommand = new DelegateCommand(EliminarHistoria, CanExecute);
                }
                return eliminarHistoriaCommand;
            }
        }

        private void EliminarHistoria()
        {
            var seguro = Instancias.Confirmacion.ShowHandlerDialog("Está seguro que desea eliminar la historia clínica?");
            if (seguro)
            {
                HistoriaClinicaDTO HC = ArmarHistoriaClinica();
                WS.EliminarHistoria(HC.Id);
                Instancias.ModalDialog.ShowHandlerDialog("La historia clínica se ha eliminado correctamente.");
                Instancias.FrameContent.Content = new Home();
            }
        }

        #endregion
    }
}
